Rails enumのvalueはStringにしないほうがいい tl;dr
enumのvalueにStringつかうと、あとでenumの名前変えるときにめんどくさいので整数にしといたほうがよい。
どこまでいっても変更しやすさと(DBみたときの)認識しやすさのトレードオフの話なのだけれど。
code:rb
enum role: {
admin: 'admin',
guest: 'guest',
developer: 'developer',
}, _prefix: true
こういうenumがあって、「adminっていう呼び方は政治的によろしくないことになったので、明日からはmanager, supervisor などの呼び方に変えましょう」となったときに、互換性を保ったまま名前を変えようとすると
code:rb
enum role: {
manager: 'admin',
guest: 'guest',
developer: 'developer',
}, _prefix: true
となって、カラムにadminという値が残り続けてしまう。カラムに入っている値も変えればいいんだけどひと手間。最初からenumの値に整数を採用して admin: 0 であれば、そのまま manager: 0 に変えるだけでよいので楽。
先述の通り、どこまでいってもトレードオフの話で、両方メリット・デメリットあるので認識したうえでStringかIntegerか選べばよいとは思う。自分は、名前とか呼称の永続性みたいなものを信頼していないというか、変化は善、変化は常に良い、常に変化し続けることこそが正しいみたいな気持ちがあるので、変更容易性を重視して、本ページタイトル通りの「enumにStringつかうな」というポジションを基本はとろうと思う。